 #pragma once

// Defines the highest available Windows platform
#include <SDKDDKVer.h>

#ifndef DIRECTINPUT_VERSION
// Direct input version
 #define DIRECTINPUT_VERSION 0x0800
#endif // !DIRECTINPUT_VERSION

#ifndef STRICT
 #define STRICT
#endif // !STRICT

/// Windows Sdk Includes

#ifndef WIN32_LEAN_AND_MEAN
 #define WIN32_LEAN_AND_MEAN
#endif // !WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <initguid.h>

#ifndef REIGN_PHONE
 #include <windowsx.h>
 #include <shlobj.h>
#endif

#include <sal.h>

#pragma  warning ( disable: 4244 )
/// Standard C/C++ Library Includes
#include <fstream>
#include <string>
#include <strsafe.h>
#include <sstream>
#include <iostream>
#include <stdint.h>
#include <future>
#include <thread>
#include <mutex>
#include <vector>
#include <queue>
#include <list>
#include <map>
#include <algorithm>
#include <functional>
#include <new>
#include <debugapi.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <malloc.h>
#include <memory>
#include <assert.h>
#include <process.h>
#include <wrl.h>
#include <wrl/client.h>
#include <varargs.h>
#include <exception>
#include <type_traits>
#include <utility>
#include <array>
#include <winsock.h>

#include <sal.h>
#include <concurrencysal.h>

#include <ppl.h>
#include <ppltasks.h>
#include <concurrencysal.h>
//#include <concurrent_priority_queue.h>
#include <concurrent_queue.h>
//#include <concurrent_unordered_map.h>
//#include <concurrent_unordered_set.h>
//#include <concurrent_vector.h>

// Requires Windows Runtime Support
#ifndef REIGN_DESKTOP
 #include <agile.h>
#endif

#pragma  warning( default: 4244 )

#include "ReignCore.hxx"

using namespace Reign::Standard;
using namespace Reign;
using namespace Microsoft;
#ifndef REIGN_DESKTOP
using namespace Windows;
#endif

#define CreateAsync Concurrency::create_task